home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / editor / frexxed / fpl / comment.fpl < prev    next >
Text File  |  1995-07-18  |  4KB  |  130 lines

  1. // $VER: Comment.FPL 2.1 (02.03.95) © Jesper Skov $
  2.  
  3. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Comment Preference Interface ««
  4. void export CommentPrefs()
  5. {
  6.   PromptInfo(-1,"Comment preferences",-1,-1,
  7.     "comment_column",
  8.     "comment_end",
  9.     "comment_start",
  10.     "comment_start_skip",
  11.     "line_comment_body",
  12.     "line_comment_end",
  13.     "line_comment_start"
  14.    );
  15. }
  16.  
  17. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» LineComment() ««
  18. void export LineComment()
  19. {
  20.   int width = ReadInfo("wall_right");
  21.   string comment = joinstr(" ",PromptString("","Enter line comment","")," ");
  22.   int col;
  23.   string output;
  24.   string body = ReadInfo("line_comment_body");
  25.   string start = ReadInfo("line_comment_start");
  26.   string end = ReadInfo("line_comment_end");
  27.  
  28.   if ((strlen(comment)!=2) && (strlen(comment) < (width - strlen(start) - strlen(end)))){
  29.     if (width==0)                            // Fallback if no right_wall
  30.       width = 79;
  31.  
  32.     output += ReadInfo("line_comment_start");
  33.     for (col = strlen(start); col < (width-strlen(end)-1-strlen(comment)); col++)
  34.       output = joinstr(output, body);
  35.  
  36.     GotoLine(ReadInfo("line"));                // on an empty line
  37.  
  38.     output = joinstr(output, comment, ReadInfo("line_comment_end"));
  39.  
  40.     if (1!=ReadInfo("line_length"))
  41.       output += "\n";
  42.  
  43.     Output(output);
  44.   }
  45. }
  46.  
  47. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» InsertComment() ««
  48. void export InsertComment()
  49. {
  50.   string tempString=GetLine();
  51.  
  52.   GotoLine(ReadInfo("line"));
  53.  
  54.   if (Search(ReadInfo("comment_start_skip"), "=f+w+", ReadInfo("line_length"))){
  55.     // Let's make a new comment!
  56.     string com=joinstr(ReadInfo("comment_start"), ReadInfo("comment_end"));
  57.     GotoLine(ReadInfo("line"), ReadInfo("line_length"));
  58.     Output(com);
  59.     CursorLeft(strlen(com));
  60.   }
  61.  
  62.   // There is already a comment!
  63.   if (ReadInfo("comment_column")!=ReadInfo("column")){
  64.     // Wrong indent!
  65.     int i=ReadInfo("byte_position");
  66.     int cont=1;
  67.  
  68.     if (1<strlen(tempString)){
  69.       while (i>0 && cont){
  70.         i--;
  71.         if (!Isspace(tempString[i]))
  72.           cont=0;
  73.       }
  74.       if (CursorLeft(ReadInfo("byte_position")-i-1))
  75.         DeleteWord();
  76.     }
  77.     IndentToCC();                            // Get correct indention
  78.   }
  79.   CursorRight(strlen(ReplaceMatch(ReadInfo("comment_start_skip"), "\\&")));
  80. }
  81.  
  82. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» IndentToCC ««
  83. void IndentToCC()
  84. {
  85.   int col = ReadInfo("comment_column") - ReadInfo("column");
  86.   int tab = ReadInfo("tab_size");
  87.   string out;
  88.    
  89.   if (0 >= col)
  90.     out= " ";                                // simply insert one space
  91.   else {
  92.     if(ReadInfo("indent_uses_tabs")){
  93.       if ((ReadInfo("column")/tab+1)*tab <= ReadInfo("comment_column"))
  94.         Output("\t");                        // First align to tabular column
  95.       col = ReadInfo("comment_column") - ReadInfo("column");
  96.       while(col>=tab){                        // Then work by calculating
  97.         out += "\t";
  98.         col = col-tab;
  99.       }
  100.     }
  101.     while(col>0){
  102.       out += " ";
  103.       col--;
  104.     }
  105.   }
  106.   Output(out);
  107. }
  108.  
  109. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Menu ««
  110. MenuAdd("s", "Comment...", "CommentPrefs();", "", 6,6,-1);
  111. MenuBuild();
  112.  
  113. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Key bindings ««
  114. AssignKey("InsertComment();","amiga ;"); 
  115. AssignKey("LineComment();","amiga :");
  116.  
  117. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Info variables ««
  118. ConstructInfo("comment_column","","","WHLI","",1,999,45);
  119.  
  120. ConstructInfo("comment_start_skip","","","WHLS","",0,0,"//\\*+ ");
  121. ConstructInfo("comment_start","","","WHLS","",0,0,"/* ");
  122. ConstructInfo("comment_end","","","WHLS","",0,0," */");
  123.  
  124. ConstructInfo("line_comment_body","","","WHLS","",0,0,"»");
  125. ConstructInfo("line_comment_end","","","WHLS","",0,0,"««");
  126. ConstructInfo("line_comment_start","","","WHLS","",0,0,"//");
  127.  
  128. ConstructInfo("indent_uses_tabs","","","WLB","",0,1,1);
  129. ConstructInfo("wall_right", "", "", "WIL", "", 0, 999, 79);
  130.